// @/api/teachingProject.js
import http from '@/utils/request'

// 教学项目相关的API接口

/**
 * 获取教学项目列表
 * @param {Object} params - 查询参数
 * @param {number} params.page - 页码
 * @param {number} params.size - 每页大小
 * @param {string} params.search - 搜索关键词
 * @param {string} params.status - 项目状态
 * @param {string} params.project_type - 项目类型
 * @param {string} params.level - 项目级别
 * @param {string} params.start_date - 开始日期
 * @param {string} params.end_date - 结束日期
 * @returns {Promise}
 */
export function getTeachingProjects(params = {}) {
    return http({
        url: '/api/projects/list',
        method: 'get',
        params
    })
}

/**
 * 根据ID获取教学项目详情
 * @param {number} id - 项目ID
 * @returns {Promise}
 */
export function getProjectById(id) {
    return http({
        url: `/api/projects/${id}`,
        method: 'get'
    })
}

/**
 * 创建教学项目
 * @param {Object} data - 项目数据
 * @param {string} data.name - 项目名称
 * @param {string} data.project_type - 项目类型
 * @param {string} data.level - 项目级别
 * @param {number} data.leader_id - 负责人ID
 * @param {number} data.funding - 经费
 * @param {string} data.source - 经费来源
 * @param {string} data.status - 项目状态
 * @param {string} data.start_date - 开始日期
 * @param {string} data.end_date - 结束日期
 * @returns {Promise}
 */
export function createTeachingProject(formData) {
    // 按后端定义使用 multipart 和 data + files
    // 不手动设置Content-Type，让浏览器自动设置（包含boundary）
    return http({
        url: '/api/projects',
        method: 'post',
        data: formData
    })
}

/**
 * 更新教学项目
 * @param {number} id - 项目ID
 * @param {Object} data - 更新的项目数据
 * @returns {Promise}
 */
export function updateTeachingProject(id, formData) {
    // 不手动设置Content-Type，让浏览器自动设置（包含boundary）
    return http({
        url: `/api/projects/${id}/resubmit`,
        method: 'post',
        data: formData
    })
}

/**
 * 删除教学项目
 * @param {number} id - 项目ID
 * @returns {Promise}
 */
export function deleteTeachingProject(id) {
    return http({
        url: `/api/projects/${id}`,
        method: 'delete'
    })
}

/**
 * 上传项目附件
 * @param {FormData} formData - 包含文件和项目ID的表单数据
 * @returns {Promise}
 */
export function uploadProjectAttachment(formData) {
    // 统一走提交接口，无单独上传端点
    return Promise.reject(new Error('请在提交接口中一并上传'))
}

/**
 * 删除附件
 * @param {number} attachmentId - 附件ID
 * @returns {Promise}
 */
export function deleteAttachment(attachmentId) {
    return http({
        url: `/api/attachments/${attachmentId}`,
        method: 'delete'
    })
}

/**
 * 下载附件
 * @param {number} attachmentId - 附件ID
 * @param {string} fileName - 文件名
 * @returns {Promise}
 */
export function downloadAttachment(attachmentId, fileName) {
    return http({
        url: `/api/attachments/${attachmentId}/download`,
        method: 'get',
        responseType: 'blob',
        headers: { 'Accept': 'application/octet-stream' }
    }).then(response => {
        const url = window.URL.createObjectURL(new Blob([response.data]))
        const link = document.createElement('a')
        link.href = url
        link.setAttribute('download', fileName)
        document.body.appendChild(link)
        link.click()
        link.remove()
        window.URL.revokeObjectURL(url)
    })
}

/**
 * 导出项目数据
 * @param {Object} params - 导出参数
 * @returns {Promise}
 */
export function exportTeachingProjects(params = {}) {
    return Promise.reject(new Error('未实现'))
}

/**
 * 按状态获取项目列表
 * @param {string} status - 项目状态
 */
export function getProjectsByStatus(status) {
    return http({
        url: `/api/projects/by-status/${encodeURIComponent(status)}`,
        method: 'get'
    })
}

/**
 * 审核项目（申报/结题）
 * @param {number} projectId - 项目ID
 * @param {{status: string, opinion: string}} data - 审核结果
 */
export function reviewProject(projectId, data) {
    return http({
        url: `/api/projects/${projectId}/review`,
        method: 'post',
        data
    })
}